package site.lianwu.mybatis.plus.query.processor;

import site.lianwu.mybatis.plus.query.model.ExecutableQueryStatement;
import site.lianwu.mybatis.plus.query.model.QueryField;

import java.lang.reflect.Field;
import java.util.List;
import java.util.Optional;

/**
 * 查询字段处理器
 *
 * @author LianWu
 */
public interface QueryFieldProcessor {

    /**
     * 提取查询字段
     *
     * @param field 字段
     * @return 查询字段 {@link QueryField}
     */
    Optional<QueryField> extract(Field field);

    /**
     * 解析查询字段
     *
     * @param queryField 查询字段
     * @param fieldValue 条件字段值
     * @return 可执行的查询语句 {@link ExecutableQueryStatement}列表
     */
    List<ExecutableQueryStatement> parse(QueryField queryField, Object fieldValue);

}
